2 uzivatelia edituju rovnaky zaznam v IB
Otázka od: hlas
28. 10. 2002 9:10
Neviem, ci tomu nespravne rozumiem alebo to nefunguje...
Robim aplikaciu v D7 cez DBExpress komponentu TSimpleDataSet.
nad Firebirdom. Kod udalosti afterpost je jednoduchy:
if not DM.SQLCon.InTransaction then
begin
TD.TransactionID:=1;
TD.IsolationLevel:=xilREADCOMMITTED;
DM.SQLCon.StartTransaction(TD);
try
DM.SDSAdr.ApplyUpdates(-1);
DM.SDSAdrPol.ApplyUpdates(-1);
DM.SQLCon.Commit(TD);
except
DM.SQLCon.Rollback(TD);
end;
end;
V pripade, ze prvy uzivatel ulozi svoju zmenu skor, zmena sa zapise
do databazy. Druhy uzivatel pri pokuse o ulozenie toho isteho zaznamu
je upozorneny, ze pocas editacie boli zmenene niektore polia.
Zobrazi sa reconcile dialog na zaklade udalosti
OnReconcile Error, ktora je tiez jednoducha:
Action := HandleReconcileError(DataSet, UpdateKind, E);
Ocakaval som, ze uzivatel si v tomto dialogu moze vybrat, ci tie svoje
zmeny chce aj tak ulozit, alebo nie. Ocakaval som, ze ak vyberie
action:=raCorrect
zmeny druheho sa ulozia do databazy a vpodstate tak druhy uzivatel prepise
prveho, ale nic. Robim niekde chybu? Jednoducho nedokazem, aby druhy
prepisal prveho, ak chce.
Odpovedá: Zbysek Hlinka
28. 10. 2002 9:19
On 28 Oct 2002 at 8:39, hlas wrote:
> Neviem, ci tomu nespravne rozumiem alebo to nefunguje...
>
> if not DM.SQLCon.InTransaction then
> begin
> TD.TransactionID:=1;
> TD.IsolationLevel:=xilREADCOMMITTED;
> DM.SQLCon.StartTransaction(TD);
> try
> DM.SDSAdr.ApplyUpdates(-1);
> DM.SDSAdrPol.ApplyUpdates(-1);
> DM.SQLCon.Commit(TD);
> except
> DM.SQLCon.Rollback(TD);
> end;
> end;
>
> V pripade, ze prvy uzivatel ulozi svoju zmenu skor, zmena sa zapise do
> databazy. Druhy uzivatel pri pokuse o ulozenie toho isteho zaznamu je
> upozorneny, ...
> Robim niekde chybu?
Jo. Kdyz mas aktivni kursor na data, nemuzes je menit. Musis posila
SLQ prikaz Update. Budto si to predelej tak, aby sis jen stahnul data
a pak se od DB odpojil, nebo posli prikaz jinou komponentou a pak
udelej refresh.
S pozdravem
Zbysek Hlinka
E-mail: hlinka@hlinka.cz, localizator@localizator.com
Phone: +420 603 551 282
Odpovedá: hlas
28. 10. 2002 12:06
----- Original Message -----
From: "Zbysek Hlinka" <hlinka@hlinka.cz>
> Jo. Kdyz mas aktivni kursor na data, nemuzes je menit. Musis posila
> SLQ prikaz Update. Budto si to predelej tak, aby sis jen stahnul data
> a pak se od DB odpojil, nebo posli prikaz jinou komponentou a pak
> udelej refresh.
>
> Zbysek Hlinka
Nemozes to popisat prosim ta lepsie? Ked robim s komponentou
TSimpleDataSet, tak neposielam sql prikaz update,
to riesi sama komponenta, takze neviem ako
by som cez TSimpleDataSet poslal Update.
Viem si to predstavit napr. cez IBX komponenty
IB Query a IBUpdateSql.
Neviem tiez ako sa odpijit od DB.
Akonahle dam Tsimpledataset.active:=false,
tak koncim...
Aku inu komponentu mam dat do hry?
Hlas
Odpovedá: Zbysek Hlinka
28. 10. 2002 13:40
On 28 Oct 2002 at 11:40, hlas wrote:
> Nemozes to popisat prosim ta lepsie? Ked robim s komponentou
> TSimpleDataSet, tak neposielam sql prikaz update,
> to riesi sama komponenta, takze neviem ako
> by som cez TSimpleDataSet poslal Update.
> Viem si to predstavit napr. cez IBX komponenty
> IB Query a IBUpdateSql.
Nesmis to nechat na komponente, kterou ctes data, zejmena kdyz tato
komponenta udrzuje zive spojeni na kursor s daty. Veskere inserty,
updaty a delety je stejne nejbezpecnejsi delat pomoci ulozenych
procedur.
S pozdravem
Zbysek Hlinka
E-mail: hlinka@hlinka.cz, localizator@localizator.com
Phone: +420 603 551 282